module SearchTestHelper
  extend ActiveSupport::Concern

  included do
    self.use_transactional_tests = false

    setup :setup_search_test
    teardown :teardown_search_test
  end

  def setup_search_test
    clear_search_records
    Account.find_by(name: "Search Test")&.destroy
    Identity.find_by(email_address: "test@example.com")&.destroy

    @account = Account.create!(name: "Search Test", external_account_id: ActiveRecord::FixtureSet.identify("search_test"))
    Current.account = @account
    @identity = Identity.create!(email_address: "test@example.com")
    @user = User.create!(name: "Test User", account: @account, identity: @identity)
    @board = Board.create!(name: "Test Board", account: @account, creator: @user)
  end

  def teardown_search_test
    clear_search_records
    Account.find_by(name: "Search Test")&.destroy
    Identity.find_by(email_address: "test@example.com")&.destroy
  end

  private
    def clear_search_records
      if ActiveRecord::Base.connection.adapter_name == "SQLite"
        ActiveRecord::Base.connection.execute("DELETE FROM search_records")
        ActiveRecord::Base.connection.execute("DELETE FROM search_records_fts")
      else
        Search::Record::Trilogy::SHARD_COUNT.times do |shard_id|
          ActiveRecord::Base.connection.execute("DELETE FROM search_records_#{shard_id}")
        end
      end
    end
end
